#include "Item.h"

Item::Item(const QString & aID)
	: mID(aID)
{
}

const QString & Item::getID() const
{
	return mID;
}

const TSubItems & Item::getSubItems() const
{
	return mSubItems;
}

bool Item::childAction(Item::ChildAction aAction, Item * aItem)
{
	switch (aAction)
	{
		case Add: addSubItem(aItem); return true;
		case Remove: removeSubItem(aItem); return true;
		case Build: aItem->build(); return true;
		case Edit: /*aItem->edit();*/ return false;

		// Unknown action type.
		default: return false;
	}
}

void Item::onSubItemStateChanged(Item::State /*aState*/)
{
}

void Item::addSubItem(Item * aItem)
{
	if (!mSubItems.contains(aItem))
	{
		connect(aItem, SIGNAL(stateChanged(Item::State)), SLOT(onSubItemStateChanged(Item::State)), Qt::UniqueConnection);

		aItem->setParent(this);

		mSubItems << aItem;
	}
}

void Item::removeSubItem(Item * aItem)
{
	if (mSubItems.contains(aItem))
	{
		disconnect(aItem, SIGNAL(stateChanged(Item::State)), this, SLOT(onSubItemStateChanged(Item::State)));

		mSubItems.removeAll(aItem);
	}
}